home *** CD-ROM | disk | FTP | other *** search
/ Komputer for Alle 2003 Ekstra 100 Spil / K-CD_2003_Ekstra_100_Spil.iso / Action / GLtron / GLtron-0.62-setup.exe / {app} / scripts / menu.lua < prev    next >
Text File  |  2002-12-21  |  18KB  |  526 lines

  1. MenuC = {
  2.    type = {
  3.       menu = 1,
  4.       list = 2,
  5.       slider = 3,
  6.       key = 4,
  7.       string = 5, -- not used yet
  8.       number = 6, -- not used yet
  9.       action = 7
  10.    },
  11.    keys = {
  12.       player1 = {},
  13.       player2 = {},
  14.       player3 = {},
  15.       player4 = {}
  16.    }
  17. }
  18.  
  19. Menu = { 
  20.    -- menu after startup
  21.    current = "RootMenu",
  22.    active = 1,
  23.    -- Menu definitions
  24.    RootMenu = { type = MenuC.type.menu, caption = "" },
  25.    GameMenu = { type = MenuC.type.menu, caption = "Game" },
  26.    GameRulesMenu = { type = MenuC.type.menu, caption = "Game Rules" },
  27.    GameSettingsMenu = { type = MenuC.type.menu, caption = "Play Settings" },
  28.    PlayerConfigMenu = { type = MenuC.type.menu, caption = "Configure Players" },
  29.    KeyConfigMenu = { type = MenuC.type.menu, caption = "Configure Keys" },
  30.    Player1_KeyMenu = { type = MenuC.type.menu, caption = "Player 1" },
  31.    Player2_KeyMenu = { type = MenuC.type.menu, caption = "Player 2" },
  32.    Player3_KeyMenu = { type = MenuC.type.menu, caption = "Player 3" },
  33.    Player4_KeyMenu = { type = MenuC.type.menu, caption = "Player 4" },
  34.    VideoMenu = { type = MenuC.type.menu, caption = "Video" },
  35.    TextureMenu = { type = MenuC.type.menu, caption = "Texture Options" },
  36.    DetailsMenu = { type = MenuC.type.menu, caption = "Detail Options" },
  37.    ScreenMenu = { type = MenuC.type.menu, caption = "Screen Options" },
  38.    AudioMenu = { type = MenuC.type.menu, caption = "Audio" },
  39.  
  40.    -- Item definitions
  41.    -- RootMenu
  42.    Quit = { 
  43.       type = MenuC.type.action, caption = "Quit",
  44.       action = function() c_quitGame(); end
  45.    },
  46.  
  47.    -- Game
  48.    StartGame = { 
  49.       type = MenuC.type.action, caption = "Start Game",
  50.       action = function() Menu.current = "RootMenu"; c_startGame(); end
  51.    },
  52.    ResetScores = { 
  53.       type = MenuC.type.action, caption = "Reset Scores",
  54.       action = function() c_resetScores(); end
  55.    },
  56.  
  57.    -- Game Rules
  58.    GameSpeed = { 
  59.       type = MenuC.type.list, caption = "Game speed",
  60.       labels = { "boring", "normal", "fast", "crazy" },
  61.       values = { 5.0, 6.5, 8.5, 12.0 },
  62.       read = function() return settings.speed; end, 
  63.       store = function (value) settings.speed = value; c_resetGame(); end
  64.    },
  65.    BotSkill = {
  66.       type = MenuC.type.list, caption = "Bot Skill",
  67.       labels = { "dumb", "normal", "strong", "the MCP himself" },
  68.       values = { 0, 1, 2, 3 },
  69.       read = function() return settings.ai_level; end,
  70.       store = function (value) settings.ai_level = value; end
  71.    },
  72.    ArenaSize = {
  73.       type = MenuC.type.list, caption = "Arena Size",
  74.       labels = { "tiny", "medium", "big", "vast", "extreme" },
  75.       values = { 160, 240, 480, 720, 1200 },
  76.       read = function() return settings.grid_size; end,
  77.       store = function (value) settings.grid_size = value; c_resetGame(); end
  78.    },
  79.    EraseDeadPlayers = {    
  80.       type = MenuC.type.list, caption = "Erase dead players",
  81.       labels = { "off", "on" },
  82.       values = { 0, 1 },
  83.       read = function() return settings.erase_crashed; end,
  84.       store = function(value) settings.erase_crashed = value; c_resetGame(); end
  85.    },
  86.  
  87.    -- GameSettings
  88.    FastFinish = {    
  89.       type = MenuC.type.list, caption = "Fast finish",
  90.       labels = { "off", "on" },
  91.       values = { 0, 1 },
  92.       read = function() return settings.fast_finish; end,
  93.       store = function(value) settings.fast_finish = value; end
  94.    },
  95.    CameraMode = {    
  96.       type = MenuC.type.list, caption = "Camera mode",
  97.       labels = { "circling", "behind", "cockpit", "mouse" },
  98.       values = { 0, 1, 2, 3 },
  99.       read = function() return settings.camType; end,
  100.       store = function(value) settings.camType = value; c_resetCamera(); end
  101.    },
  102.    Viewports = {    
  103.       type = MenuC.type.list, caption = "Viewports",
  104.       labels = { "single", "split", "4 player", "auto" },
  105.       values = { 0, 1, 2, 3 },
  106.       read = function() return settings.display_type; end,
  107.       store = function(value) settings.display_type = value; end
  108.    },
  109.      Map = {
  110.             type = MenuC.type.list, caption = "2D Map",
  111.             labels = { "none", "small", "medium", "huge" },
  112.             values = { 0, 0.333, 0.5, 0.9 },
  113.             read = function() return settings.map_ratio_w; end,
  114.             store = function(value) 
  115.               settings.map_ratio_w = value;
  116.               settings.map_ratio_h = value;
  117.        end
  118.    },
  119.  
  120.    -- Player
  121.    Player1 = {    
  122.       type = MenuC.type.list, caption = "Player 1", 
  123.       labels = { "Human", "Computer", "None" },
  124.       values = { 0, 1, 2 },
  125.       read = function() return settings.ai_player1; end,
  126.       store = function(value) settings.ai_player1 = value; c_resetGame(); end
  127.    },
  128.  
  129.    Player2 = {    
  130.       type = MenuC.type.list, caption = "Player 2", 
  131.       labels = { "Human", "Computer", "None" },
  132.       values = { 0, 1, 2 },
  133.       read = function() return settings.ai_player2; end,
  134.       store = function(value) settings.ai_player2 = value; c_resetGame(); end
  135.    },
  136.  
  137.    Player3 = {    
  138.       type = MenuC.type.list, caption = "Player 3", 
  139.       labels = { "Human", "Computer", "None" },
  140.       values = { 0, 1, 2 },
  141.       read = function() return settings.ai_player3; end,
  142.       store = function(value) settings.ai_player3 = value; c_resetGame(); end
  143.    },
  144.  
  145.    Player4 = {    
  146.       type = MenuC.type.list, caption = "Player 4", 
  147.       labels = { "Human", "Computer", "None" },
  148.       values = { 0, 1, 2 },
  149.       read = function() return settings.ai_player4; end,
  150.       store = function(value) settings.ai_player4 = value; c_resetGame(); end
  151.    },
  152.  
  153.    -- PlayerX_Key
  154.    Player1_Left = { 
  155.       type = MenuC.type.key, caption = "Player 1 Left",
  156.       player = 1, event = "left"
  157.   },
  158.    Player1_Right = { 
  159.       type = MenuC.type.key, caption = "Player 1 Right",
  160.       player = 1, event = "right"
  161.    },
  162.    Player2_Left = { 
  163.       type = MenuC.type.key, caption = "Player 2 Left",
  164.       player = 2, event = "left"
  165.    },
  166.    Player2_Right = { 
  167.       type = MenuC.type.key, caption = "Player 2 Right",
  168.       player = 2, event = "right"
  169.    },
  170.    Player3_Left = { 
  171.       type = MenuC.type.key, caption = "Player 3 Left",
  172.       player = 3, event = "left"
  173.    },
  174.    Player3_Right = { 
  175.       type = MenuC.type.key, caption = "Player 3 Right",
  176.       player = 3, event = "right"
  177.    },
  178.    Player4_Left = { 
  179.       type = MenuC.type.key, caption = "Player 4 Left",
  180.       player = 4, event = "left"
  181.    },
  182.    Player4_Right = { 
  183.       type = MenuC.type.key, caption = "Player 4 Right",
  184.       player = 4, event = "right"
  185.    },
  186.  
  187.    -- TODO: fill in the rest of the items
  188.  
  189.    -- Video
  190.  
  191.    -- Texture
  192.    Artpack = {
  193.       type = MenuC.type.slider, caption = "Artpack",
  194.       right = nextArtpack,
  195.       left = previousArtpack,
  196.       action = nextArtpack,
  197.       read = function() return settings.current_artpack; end
  198.    },
  199.    Floor = {
  200.       type = MenuC.type.list, caption = "Floor texture",
  201.       labels = { "off", "on" },
  202.       values = { 0, 1 },
  203.       read = function() return settings.show_floor_texture; end,
  204.       store = function(value) settings.show_floor_texture = value; end
  205.    },
  206.    Wall = {
  207.       type = MenuC.type.list, caption = "Wall texture",
  208.       labels = { "off", "on" },
  209.       values = { 0, 1 },
  210.       read = function() return settings.show_wall; end,
  211.       store = function(value) settings.show_wall = value; end
  212.    },
  213.    Skybox = {
  214.       type = MenuC.type.list, caption = "Skybox texture",
  215.       labels = { "off", "on" },
  216.       values = { 0, 1 },
  217.       read = function() return settings.show_skybox; end,
  218.       store = function(value) settings.show_skybox = value; end
  219.    },
  220.    Decals = {
  221.       type = MenuC.type.list, caption = "Trail decals",
  222.       labels = { "off", "on" },
  223.       values = { 0, 1 },
  224.       read = function() return settings.show_decals; end,
  225.       store = function(value) settings.show_decals = value; end
  226.    },
  227.    Mipmaps = {
  228.       type = MenuC.type.list, caption = "Use mipmaps",
  229.       labels = { "off", "on" },
  230.       values = { 0, 1 },
  231.       read = function() return settings.use_mipmaps; end,
  232.       store = function(value) settings.use_mipmaps = value; end
  233.    },
  234.    Filtering = {
  235.       type = MenuC.type.list, caption = "Mitmap filter",
  236.       labels = { "bilinear", "trilinear" },
  237.       values = { 0, 1 },
  238.       read = function() return settings.mipmap_filter; end,
  239.       store = function(value) settings.mipmap_filter = value; end
  240.    },
  241.    WallScaling = {
  242.       type = MenuC.type.list, caption = "Wall Scaling",
  243.       labels = { "off", "on" },
  244.       values = { 0, 1 },
  245.       read = function() return settings.stretch_textures; end,
  246.       store = function(value) settings.stretch_textures = value; end
  247.    },
  248.  
  249.    -- Detail
  250.    AlphaTrails = {
  251.       type = MenuC.type.list, caption = "Transparent trails",
  252.       labels = { "off", "on" },
  253.       values = { 0, 1 }, 
  254.       read = function() return settings.alpha_trails; end,     
  255.       store = function(value) settings.alpha_trails = value; end
  256.    },
  257.    Halos = {
  258.       type = MenuC.type.list, caption = "Halos",
  259.       labels = { "off", "on" },
  260.       values = { 0, 1 },
  261.       read = function() return settings.show_glow; end,
  262.       store = function(value) settings.show_glow = value; end
  263.    },
  264.    Lightcycles = {
  265.       type = MenuC.type.list, caption = "Lightcycles",
  266.       labels = { "off", "on" },
  267.       values = { 0, 1 },
  268.       read = function() return settings.show_model; end,
  269.       store = function(value) settings.show_model = value; end
  270.    },
  271.    Recognizer = {
  272.       type = MenuC.type.list, caption = "Recognizers",
  273.       labels = { "off", "on" },
  274.       values = { 0, 1 },
  275.       read = function() return settings.show_recognizer; end,
  276.       store = function(value) settings.show_recognizer = value; end
  277.    },
  278.    ImpactAnimation = {
  279.       type = MenuC.type.list, caption = "Impact Animation",
  280.       labels = { "off", "on" },
  281.       values = { 0, 1 },
  282.       read = function() return settings.show_impact; end,
  283.       store = function(value) settings.show_impact = value; end
  284.    }, 
  285.    CycleLod = {
  286.       type = MenuC.type.list, caption = "Cycle LOD",
  287.       labels = { "ugly", "low", "high", "ultra-high" },
  288.       values = { 3, 2, 1, 0 },
  289.       read = function() return settings.lod; end,
  290.       store = function(value) settings.lod = value; end
  291.    },
  292.    ShadowLod = {
  293.       type = MenuC.type.list, caption = "Shadow LOD",
  294.       labels = { "normal", "high" },
  295.       values = { 0, 1 },
  296.       read = function() return settings.shadow_lod; end,
  297.       store = function(value) settings.shadow_lod = value; end
  298.    },
  299.    ShadowStyle = {
  300.       type = MenuC.type.list, caption = "Shadow Type",
  301.       labels = { "stencil", "normal" },
  302.       values = { 1, 0 },
  303.       read = function() return settings.use_stencil; end,
  304.       store = function(value) settings.use_stencil = value; c_video_restart(); end
  305.    },
  306.    FPS_Counter = {
  307.       type = MenuC.type.list, caption = "FPS counter",
  308.       labels = { "off", "on" },
  309.       values = { 0, 1 },
  310.       read = function() return settings.show_fps; end,
  311.       store = function(value) settings.show_fps = value; end
  312.    },
  313.    AI_Status = {
  314.       type = MenuC.type.list, caption = "AI status",
  315.       labels = { "off", "on" },
  316.       values = { 0, 1 },
  317.       read = function() return settings.show_ai_status; end,
  318.       store = function(value) settings.show_ai_status = value; end
  319.    },
  320.    Scores = {
  321.       type = MenuC.type.list, caption = "Scores",
  322.       labels = { "off", "on" },
  323.       values = { 0, 1 },
  324.       read = function() return settings.show_scores; end,
  325.       store = function(value) settings.show_scores = value; end
  326.    },
  327.  
  328.    -- Screen
  329.    _320x240 = {
  330.       type = MenuC.type.action, caption = "320 x 240",
  331.       action =  function() settings.width = 320; settings.height = 240; c_video_restart(); end
  332.    },
  333.    _512x384 = {
  334.       type = MenuC.type.action, caption = "512 x 384",
  335.       action =  function() settings.width = 512; settings.height = 384; c_video_restart(); end
  336.    },
  337.    _640x480 = {
  338.       type = MenuC.type.action, caption = "640 x 480",
  339.       action =  function() settings.width = 640; settings.height = 480; c_video_restart(); end
  340.    },
  341.    _800x600 = {
  342.       type = MenuC.type.action, caption = "800 x 600",
  343.       action =  function() settings.width = 800; settings.height = 600; c_video_restart(); end
  344.    },
  345.    _1024x768 = {
  346.       type = MenuC.type.action, caption = "1024 x 768",
  347.       action =  function() settings.width = 1024; settings.height = 768; c_video_restart(); end
  348.    },
  349.    _1280x1024 = {
  350.       type = MenuC.type.action, caption = "1280 x 1024",
  351.       action =  function() settings.width = 1280; settings.height = 1024; c_video_restart(); end
  352.    },
  353.    _1600x1200 = {
  354.       type = MenuC.type.action, caption = "1600 x 1200",
  355.       action =  function() settings.width = 1600; settings.height = 1200; c_video_restart(); end
  356.    },
  357.    WindowMode = {
  358.       type = MenuC.type.list, caption = "Windowed",
  359.       labels = { "off", "on" },
  360.       values = { 0, 1 },
  361.       read = function() return settings.windowMode; end,
  362.       store = function(value) settings.windowMode = value; c_video_restart(); end
  363.    },
  364.  
  365.    -- Audio
  366.    Music = {
  367.       type = MenuC.type.list, caption = "Music",
  368.       labels = { "off", "on" },
  369.       read = function() return settings.playMusic; end,
  370.       values = { 0, 1 },
  371.       store = function(value) settings.playMusic = value; c_update_settings_cache() ; end
  372.    },
  373.    FX = {
  374.       type = MenuC.type.list, caption = "Sound FX",
  375.       labels = { "off", "on" },
  376.       values = { 0, 1 },
  377.       read = function() return settings.playEffects; end,
  378.       store = function(value) settings.playEffects = value; end
  379.    },
  380.    Music_Volume = {
  381.       type = MenuC.type.slider, caption = "Music Volume",
  382.       right = function() MusicVolumeUp(); end,
  383.       left = function() MusicVolumeDown(); end,
  384.       read = function() return format("%.0f%%", settings.musicVolume * 100); end
  385.    },
  386.    FX_Volume = {
  387.       type = MenuC.type.slider, caption = "FX Volume",
  388.       right = FXVolumeUp,
  389.       left = FXVolumeDown,
  390.       read = function() return format("%.0f%%", settings.fxVolume * 100); end
  391.    },
  392.    Song = {
  393.       type = MenuC.type.slider, caption = "Song",
  394.       right = nextTrack,
  395.       left = previousTrack,
  396.       action = nextTrack,
  397.       read = function()
  398.         _,_,name = strfind(settings.current_track, "(.*)%..+")
  399.         if name then
  400.           return name
  401.         else
  402.           return settings.current_track
  403.         end
  404.       end
  405.    }
  406. }
  407.  
  408. Menu.SetParent = function ( menu )
  409.    script_print("processing menu '" .. menu .. "'")
  410.    local _,entry
  411.    for _,entry in Menu[menu].items do
  412.       Menu[entry].parent = menu
  413.       script_print("processing item '" .. entry .. "'")
  414.       if Menu[entry].type == MenuC.type.menu then
  415.      Menu.SetParent( entry )
  416.       end
  417.    end
  418. end
  419.  
  420. Menu.SetNames = function ()
  421.    local name,v
  422.    for name,v in Menu do
  423.       if type(v) == "table" then
  424.      v.name = name
  425.       end
  426.    end
  427. end
  428.  
  429. Menu.GotoParent = function ()
  430.    Menu.current = Menu[Menu.current].parent
  431.    Menu.active = 1
  432. end
  433.  
  434. Menu.Action = function ()
  435.    local menu = Menu[Menu.current].items[Menu.active]
  436.    local type = Menu[ menu  ].type
  437.    script_print("calling action of '" .. menu .. "', type " .. type )
  438.    MenuAction[ type ]( menu )
  439. end
  440.  
  441. Menu.Left = function ()
  442.    local menu = Menu[Menu.current].items[Menu.active]
  443.    local type = Menu[ menu  ].type
  444.    if type == MenuC.type.slider then
  445.       script_print("calling left of '" .. menu .. "'")
  446.       Menu[ menu ].left()
  447.    else
  448.       -- script_print("calling action of '" .. menu .. "', type " .. type )
  449.       -- MenuAction[ type ]( menu )      
  450.    end
  451. end
  452.  
  453. Menu.Right = function ()
  454.    local menu = Menu[Menu.current].items[Menu.active]
  455.    local type = Menu[ menu  ].type
  456.    if type == MenuC.type.slider then
  457.       script_print("calling right of '" .. menu .. "'")
  458.       Menu[ menu ].right()
  459.    else
  460.       -- script_print("calling action of '" .. menu .. "', type " .. type )
  461.       -- MenuAction[ type ]( menu )
  462.    end
  463. end
  464.  
  465.  
  466. Menu.Next = function ()
  467.    if Menu.active < getn(Menu[Menu.current].items) then
  468.       Menu.active = Menu.active + 1
  469.    else
  470.       Menu.active = 1
  471.    end
  472. end
  473.  
  474. Menu.Previous = function ()
  475.    if Menu.active > 1 then 
  476.       Menu.active = Menu.active - 1
  477.    else
  478.       Menu.active = getn(Menu[Menu.current].items)
  479.    end
  480. end
  481.  
  482. -- Menu entries
  483. Menu.RootMenu.items = { "GameMenu", "VideoMenu", "AudioMenu", "Quit" }
  484.  
  485. Menu.GameMenu.items = { 
  486.    "StartGame", "ResetScores", "GameRulesMenu", 
  487.    "GameSettingsMenu", "PlayerConfigMenu", "KeyConfigMenu"
  488. }
  489.  
  490. Menu.GameRulesMenu.items = { 
  491.    "GameSpeed", "BotSkill", "ArenaSize", "EraseDeadPlayers" 
  492. }
  493.  
  494. Menu.GameSettingsMenu.items = { "FastFinish", "CameraMode", "Viewports", "Map" }
  495. Menu.PlayerConfigMenu.items = { "Player1", "Player2", "Player3", "Player4" }
  496. Menu.KeyConfigMenu.items = { 
  497.    "Player1_KeyMenu", "Player2_KeyMenu", "Player3_KeyMenu", "Player4_KeyMenu"
  498. }
  499. Menu.Player1_KeyMenu.items = { "Player1_Left", "Player1_Right" }
  500. Menu.Player2_KeyMenu.items = { "Player2_Left", "Player2_Right" }
  501. Menu.Player3_KeyMenu.items = { "Player3_Left", "Player3_Right" }
  502. Menu.Player4_KeyMenu.items = { "Player4_Left", "Player4_Right" }
  503.  
  504. Menu.VideoMenu.items = { "TextureMenu", "DetailsMenu", "ScreenMenu" }
  505. Menu.TextureMenu.items = { 
  506.    "Artpack", "Floor", "Wall", "Skybox", 
  507.    "Decals", "Mipmaps", "Filtering", "WallScaling"
  508. }
  509. Menu.DetailsMenu.items = {
  510.    "AlphaTrails", "Halos", "Lightcycles", "Recognizer", "ImpactAnimation", 
  511.    "CycleLod", "ShadowLod", "ShadowStyle", "FPS_Counter", "AI_Status", "Scores"
  512. }
  513. Menu.ScreenMenu.items = {
  514.    "_320x240", "_512x384", "_640x480", "_800x600", "_1024x768", "_1280x1024",
  515.    "_1600x1200", "WindowMode"
  516. }
  517.  
  518. Menu.AudioMenu.items = { "Music", "FX", "Music_Volume", "FX_Volume", "Song" }
  519.  
  520. -- initialization code
  521. Menu.SetNames()
  522. Menu.SetParent( "RootMenu" )
  523.  
  524.  
  525.  
  526.